import os
os.environ["OPENAI_API_BASE"] = "http://192.168.2.45:8000/v1"
os.environ["OPENAI_API_KEY"] = "xxx"
# 加载大模型
from langchain_community.chat_models import ChatOpenAI
from langchain.schema import ChatMessage
from langchain_core.callbacks import StreamingStdOutCallbackHandler
llm =ChatOpenAI(temperature=0,verbose=True,callbacks=[StreamingStdOutCallbackHandler()],max_tokens=10000)
#分解搜索
from typing import List
from langchain.chains import LLMChain
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.output_parsers.string import StrOutputParser
from langchain_core.output_parsers.list import ListOutputParser
from langchain.prompts import PromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate,ChatPromptTemplate
from pydantic import BaseModel, Field
from langchain_community.chat_models import ChatOpenAI
from langchain_core.callbacks import StreamingStdOutCallbackHandler
from langchain_core.messages.human import HumanMessage
from langchain_core.messages.ai import AIMessage
systemMessage=SystemMessagePromptTemplate.from_template(template="""我希望你可以帮我预测房产平台话题的点击率，接下来我会给你一个话题，请您生成不同的平台用户，并为每个用户编写身份和兴趣和名称，购房意向，家庭情况，职业，收入，并推测每个用户是否会点击该话题，然后给出一个分数。\n 请按照以下格式来预测。
Topic: 输入的话题
Code:01-30
User: 名字 | 身份 | 购房意向 | 家庭情况 | 职业 | 年收入
Think: 该角色对话题的看法 
Is_click: 是否点击该话题 （yes/no)
Score: 该角色给出的分数 0-100 
Final_result: （话题平均Score，Is_click数）
评测的User数量不能少于30个
""")
userMessage=HumanMessagePromptTemplate.from_template(template=""""Topic:{question}""",)
chat_prompt=ChatPromptTemplate.from_messages([systemMessage,
                                              userMessage])
# template=PromptTemplate(template=""
chain=chat_prompt | llm |StrOutputParser() 
res=''
for item in chain.stream({"question":"天降学军、文渊！杭州学区划分最新官宣，业主身价要暴涨！"}):
    res+item
print(res)